package com.cskaoyan.javase.oop3._2inner._3local._3notice;

/**
 *
 * @since 10:03
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        EnclosedClazz ec = new EnclosedClazz();
        Object in = ec.test();

        Object in2 = EnclosedClazz.testStatic();
    }
}

class EnclosedClazz {
    // test是一个方法,可以通过返回值将局部内部类对象返回给方法的外部
    // 局部内部类仅在作用域内部生效,所以返回值类型仅能写它的父类类型
    public Object test() {
        // 成员方法中的局部内部类
        // 该局部内部类对象,会持有外围类对象的引用作为自身成员变量
        // 成员方法test中定义局部变量
        int a = 10;
        class Inner {
            // 局部内部类的成员方法
            public void testInner(){
                // 局部内部类的成员方法中,访问自身作用域内部的局部变量
                System.out.println(a);
                System.out.println(a + 100);
                // a = 100;
                // Variable 'a' is accessed from within inner class, needs to be final or effectively final
                // a++;
            }
        }
        Inner in = new Inner();
        return in;
    }

    public static Object testStatic() {
        // 静态成员方法中的局部内部类
        // 该局部内部类对象,不会持有外围类对象的引用作为自身成员变量
        class Inner {

        }
        Inner in = new Inner();
        return in;
    }
}